home *** CD-ROM | disk | FTP | other *** search
/ Scene 96 / Scene 96 International Edition (Zyklop Software) (Disc 2) (1997).iso / misc / coding / one_scrs / asm / m4.asm < prev    next >
Encoding:
Assembly Source File  |  1996-07-13  |  17.2 KB  |  414 lines

  1.     .386p
  2.     .model flat, c
  3.     locals
  4. ;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  5. ; EQUATES
  6. ;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  7.                 .code
  8.  
  9.                 extrn pic2:dword
  10.                 extrn pic1:dword
  11.                 extrn pic3:dword
  12.                 extrn toscreen:dword
  13.  
  14.  
  15. Frames          =       10
  16. FramesNum       =       10                    ; Fazisok szama
  17. PageDist        =       DeltaDist*FramesNum   ; Lapok tavolsaga
  18. DefDist         =       PageDist*5            ; A legnagyobb tavolsag
  19. DeltaDist       =       10                    ; A kozeledes sebessege
  20. PageRot         =       16                    ; Lapok elforgatasa
  21. DeltaRot        =       05                     ; Forgasi sebesseg
  22. Origo_X         =       32768
  23. SzinMelyseg     db      0
  24.  
  25. Random          macro
  26.                 mov esi, 00046ch
  27.                 add ax, [esi]
  28.                 add ax, [RandSeed]
  29.                 add ax, [esi]
  30.                 mov [RandSeed], ax
  31. endm
  32.  
  33. inp             macro port
  34.                 mov dx, port
  35.                 in al, dx
  36. endm
  37.  
  38. outp            macro port, value
  39.                 mov dx, port
  40.                 mov al, value
  41.                 out dx, al
  42. endm
  43.  
  44. outpw           macro port, value
  45.                 mov dx, port
  46.                 mov ax, value
  47.                 out dx, ax
  48. endm
  49.  
  50. SXL_DX_1        macro
  51.                 db 0c1h
  52.                 db 0e2h
  53.                 db 001h
  54. endm
  55.  
  56. ;«∙»«∙»«∙»«∙»«∙»«∙»«∙»«∙»«∙»«∙»«∙»«∙»«∙»«∙»«∙»«∙»«∙»«∙»«∙»«∙»«∙»«∙»«∙»«∙»«∙»
  57. ; DATA
  58. ;«∙»«∙»«∙»«∙»«∙»«∙»«∙»«∙»«∙»«∙»«∙»«∙»«∙»«∙»«∙»«∙»«∙»«∙»«∙»«∙»«∙»«∙»«∙»«∙»«∙»
  59. DDX1            dw 0
  60. DDY1            dw 0
  61. DDX2            dw 0
  62. DDY2            dw 0
  63. I               dw ?
  64. J               dw ?
  65. Rot5            db ?                    ; Aktualis szog
  66. Rot4            db ?                    ; Aktualis szog
  67. Rot3            db ?                    ; A Rotx byte-oknak lenyeges a sor-
  68. Rot2            db ?                    ; rendje, mert dword-kent is vannak
  69. Rot1            db ?                    ; egyutt kezelve!
  70. Dist1           dw ?                    ; Aktualis tavolsag
  71. Dist2           dw ?                    ;
  72. Dist3           dw ?                    ;
  73. Dist4           dw ?                    ;
  74. Dist5           dw ?                    ;
  75. FramesCount     dw 0                    ; A fazisok szama
  76. Origo_Y         dw 32768                ; Lasd a neveben!
  77. RandSeed        dw 091ch
  78. Filler          db 000h                 ; A hatter szine, ilyennel nem rajzol
  79.                                         ; illetve, ezzel tolti fel a hianyzo
  80.                                         ; reszt
  81. ;≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈
  82. ; CODE
  83. ;≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈
  84. MakeMath        macro szog, tavolsag
  85.                 ; ddx1 := (CosTable[rot]*dist) div 256;
  86.                 ; ddy1 := (SinTable[rot]*dist) div 256;
  87.                 ; ddx2 := (Cos2Table[rot]*dist) div 256;
  88.                 ; ddy2 := (Sin2Table[rot]*dist) div 256;
  89.                 ; i := x-ddx1*160-ddx2*50; j := y-ddy1*160-ddy2*50;
  90.                 mov cx, Origo_X
  91.                 mov di, [Origo_Y]
  92.                 xor ebx, ebx
  93.                 mov bl, szog            ; rot -> bx
  94.                 mov ax, word ptr Cosinus1[ebx*2]      ; cos1(rot) -> ax
  95. ;mov tavolsag,ax
  96.                 imul tavolsag           ; cos1(rot)*scale
  97.                 shld dx, ax, 8
  98.                 mov [DDX1], dx          ; cos1(rot)*scale/256 -> ddx1
  99.                 sal dx, 4
  100.                 sub cx, dx              ; i = i-32*ddx1
  101.                 sal dx, 2
  102.                 sub cx, dx              ; i = i-128*ddx1
  103.                 mov ax, word ptr Sinus1[ebx*2]      ; sin1(rot) -> ax
  104. ;imul ax
  105. ;mov I,ax
  106.                 imul tavolsag           ; sin1(rot)*scale
  107.                 shld dx, ax, 8
  108.                 mov [DDY1], dx          ; sin1(rot)*scale/256 -> ddy1
  109.                 sal dx, 4               ; i = i-32*ddy1
  110.                 sub di, dx
  111.                 sal dx, 2               ; i = i-128*ddy1
  112.                 sub di, dx
  113.                 mov ax, word ptr Cosinus2[ebx*2]      ; cos2(rot) -> ax
  114.                 imul tavolsag           ; cos2(rot)*scale
  115.                 shld dx, ax, 8
  116.                 mov [DDX2], dx          ; cos2(rot)*scale/256 -> ddx2
  117.                 SXL_DX_1
  118.                 sub cx, dx              ; i = i-4*ddx2
  119.                 sal dx, 3
  120.                 sub cx, dx              ; i = i-32*ddx2
  121.                 SXL_DX_1
  122.                 sub cx, dx              ; i = i-64*ddx2
  123.                 mov ax, word ptr Sinus2[ebx*2]      ; sin2(rot) -> ax
  124. ;                imul tavolsag           ; sin2(rot)*scale
  125.     imul ax
  126.                 shld dx, ax, 8
  127.                 mov [DDY2], dx          ; sin2(rot)*scale/256 -> ddy2
  128.     SXL_DX_1
  129.                 sub di, dx              ; j = j-4*ddx2
  130.                 sal dx, 3
  131.                 sub di, dx              ; j = j-32*ddx2
  132.                 SXL_DX_1
  133.                 sub di, dx              ; j = j-64*ddx2
  134.  
  135.                 mov [I], cx
  136.                 mov [J], di
  137. endm
  138.  
  139. MakePic         macro
  140.                 local @@VLoop, @@HLoop, @@Kitolto, @@Kell, @@nemgonosz
  141.                 mov edi, pic2
  142.                 mov si, [I]
  143.                 mov ebp, 100
  144.                 xor ebx, ebx
  145.          @@VLoop:
  146.                 mov ax, si
  147.                 mov dx, [J]
  148.                 mov cx, 160
  149.          @@HLoop:
  150.                 add ax, [DDX1]
  151.                 add dx, [DDY1]
  152.                 mov bl, ah
  153.                 mov bh, dh
  154.  
  155.                 push ebp
  156.                 mov ebp,pic1
  157.                 mov bl, [byte ptr ebp+ebx]
  158.                 pop ebp
  159. IF Kell? EQ 1
  160.                 cmp bl, [Filler]
  161.                 je @@Kitolto
  162. ENDIF
  163.                 cmp bl,SzinMelyseg
  164.                 jae @@nemgonosz
  165.                 mov bl,SzinMelyseg
  166. @@nemgonosz:
  167.                 sub bl,SzinMelyseg
  168.                 mov bh,bl
  169.                 mov [edi], bx
  170.                 mov [edi+320], bx
  171. @@Kitolto:
  172.                 inc edi
  173.                 inc edi
  174.                 dec cx
  175.                 jnz @@HLoop
  176.                 mov dx, [DDY2]
  177.                 add si, [DDX2]
  178.                 add edi, 320
  179.                 add [J], dx
  180.                 dec ebp
  181.                 jnz @@VLoop             ; Eddig
  182. endm               
  183.                 public Effect4Init
  184.                 public szovegkirako
  185.                 public szovegkirako3
  186. Effect4Init:
  187.                 pushad
  188.                 mov [Rot1], 0*PageRot
  189.                 mov [Dist1], DefDist-0*PageDist
  190.                 mov [Rot2], 1*PageRot
  191.                 mov [Dist2], DefDist-1*PageDist
  192.                 mov [Rot3], 2*PageRot
  193.                 mov [Dist3], DefDist-2*PageDist
  194.                 mov [Rot4], 3*PageRot
  195.                 mov [Dist4], DefDist-3*PageDist
  196.                 mov [Rot5], 4*PageRot
  197.                 mov [Dist5], DefDist-4*PageDist
  198.                 mov [FramesCount], FramesNum
  199.                 popad
  200.                 ret
  201.  
  202.                 public Effect4
  203. Effect4:
  204.                 pushad
  205. Kell? = 0
  206.                 mov     SzinMelyseg,35
  207.                 MakeMath [Rot1], [Dist1]
  208.                 MakePic
  209. Kell? = 1
  210.                 mov     SzinMelyseg,25
  211.                 MakeMath [Rot2], [Dist2]
  212.                 MakePic
  213.                 mov     SzinMelyseg,15
  214.                 MakeMath [Rot3], [Dist3]
  215.                 MakePic
  216.                 mov     SzinMelyseg,5
  217.                 MakeMath [Rot4], [Dist4]
  218.                 MakePic
  219.                 mov     SzinMelyseg,0
  220.                 MakeMath [Rot5], [Dist5]
  221.                 MakePic
  222. ;                add [Origo_Y], 128
  223.                 add [Rot1], DeltaRot
  224.                 sub [Dist1], DeltaDist
  225.                 add [Rot2], DeltaRot
  226.                 sub [Dist2], DeltaDist
  227.                 add [Rot3], DeltaRot
  228.                 sub [Dist3], DeltaDist
  229.                 add [Rot4], DeltaRot
  230.                 sub [Dist4], DeltaDist
  231.                 add [Rot5], DeltaRot
  232.                 sub [Dist5], DeltaDist
  233.                 dec [FramesCount]
  234.                 jnz @@NonDefault
  235.                 ror [dword ptr Rot5], 8 ; Rot-ok csereje
  236.                 mov al, [Rot1]
  237.                 mov [Rot2], al
  238.                 ;Random
  239.                 mov [Rot1], al
  240.                 add [Rot1],16
  241.                 mov [Dist1], DefDist-0*PageDist
  242.                 mov [Dist2], DefDist-1*PageDist
  243.                 mov [Dist3], DefDist-2*PageDist
  244.                 mov [Dist4], DefDist-3*PageDist
  245.                 mov [Dist5], DefDist-4*PageDist
  246.                 mov [FramesCount], FramesNum
  247.         @@NonDefault:
  248.                 popad
  249.                 ret
  250.  
  251. szovegkirako:
  252.                 mov     esi,[esp+4]
  253.                 mov     ecx,64000
  254.                 lea     edi,toscreen
  255. kiloop:         mov     al,[esi]
  256.                 cmp     al,0
  257.                 je      noput
  258.                 mov     byte ptr [edi],16
  259. noput:          inc     esi
  260.                 inc     edi
  261.                 dec     ecx
  262.                 jnz     kiloop
  263.                 ret
  264. szovegkirako3:
  265.                 mov     esi,[esp+4]
  266.                 mov     ecx,64000
  267.                 mov     edi,pic1
  268. kiloop3:        mov     al,[esi]
  269.                 cmp     al,0
  270.                 je      noput3
  271.                 add     byte ptr [edi],32
  272. noput3:         inc     esi
  273.                 inc     edi
  274.                 dec     ecx
  275.                 jnz     kiloop3
  276.                 ret
  277. Sinus1:
  278.                 dw 0, 6, 13, 19, 25, 31, 38, 44, 50
  279.                 dw 56, 62, 68, 74, 80, 86, 92, 98
  280.                 dw 104, 109, 115, 121, 126, 132, 137, 142
  281.                 dw 147, 152, 157, 162, 167, 172, 177, 181
  282.                 dw 185, 190, 194, 198, 202, 206, 209, 213
  283.                 dw 216, 220, 223, 226, 229, 231, 234, 237
  284.                 dw 239, 241, 243, 245, 247, 248, 250, 251
  285.                 dw 252, 253, 254, 255, 255, 256, 256, 256
  286.                 dw 256, 256, 255, 255, 254, 253, 252, 251
  287.                 dw 250, 248, 247, 245, 243, 241, 239, 237
  288.                 dw 234, 231, 229, 226, 223, 220, 216, 213
  289.                 dw 209, 206, 202, 198, 194, 190, 185, 181
  290.                 dw 177, 172, 167, 162, 157, 152, 147, 142
  291.                 dw 137, 132, 126, 121, 115, 109, 104, 98
  292.                 dw 92, 86, 80, 74, 68, 62, 56, 50
  293.                 dw 44, 38, 31, 25, 19, 13, 6, 0
  294.                 dw -6, -13, -19, -25, -31, -38, -44, -50
  295.                 dw -56, -62, -68, -74, -80, -86, -92, -98
  296.                 dw -104, -109, -115, -121, -126, -132, -137, -142
  297.                 dw -147, -152, -157, -162, -167, -172, -177, -181
  298.                 dw -185, -190, -194, -198, -202, -206, -209, -213
  299.                 dw -216, -220, -223, -226, -229, -231, -234, -237
  300.                 dw -239, -241, -243, -245, -247, -248, -250, -251
  301.                 dw -252, -253, -254, -255, -255, -256, -256, -256
  302.                 dw -256, -256, -255, -255, -254, -253, -252, -251
  303.                 dw -250, -248, -247, -245, -243, -241, -239, -237
  304.                 dw -234, -231, -229, -226, -223, -220, -216, -213
  305.                 dw -209, -206, -202, -198, -194, -190, -185, -181
  306.                 dw -177, -172, -167, -162, -157, -152, -147, -142
  307.                 dw -137, -132, -126, -121, -115, -109, -104, -98
  308.                 dw -92, -86, -80, -74, -68, -62, -56, -50
  309.                 dw -44, -38, -31, -25, -19, -13, -6
  310.  
  311. Cosinus1:
  312.                 dw 256, 256, 256, 255, 255, 254, 253, 252, 251
  313.                 dw 250, 248, 247, 245, 243, 241, 239, 237
  314.                 dw 234, 231, 229, 226, 223, 220, 216, 213
  315.                 dw 209, 206, 202, 198, 194, 190, 185, 181
  316.                 dw 177, 172, 167, 162, 157, 152, 147, 142
  317.                 dw 137, 132, 126, 121, 115, 109, 104, 98
  318.                 dw 92, 86, 80, 74, 68, 62, 56, 50
  319.                 dw 44, 38, 31, 25, 19, 13, 6, 0
  320.                 dw -6, -13, -19, -25, -31, -38, -44, -50
  321.                 dw -56, -62, -68, -74, -80, -86, -92, -98
  322.                 dw -104, -109, -115, -121, -126, -132, -137, -142
  323.                 dw -147, -152, -157, -162, -167, -172, -177, -181
  324.                 dw -185, -190, -194, -198, -202, -206, -209, -213
  325.                 dw -216, -220, -223, -226, -229, -231, -234, -237
  326.                 dw -239, -241, -243, -245, -247, -248, -250, -251
  327.                 dw -252, -253, -254, -255, -255, -256, -256, -256
  328.                 dw -256, -256, -255, -255, -254, -253, -252, -251
  329.                 dw -250, -248, -247, -245, -243, -241, -239, -237
  330.                 dw -234, -231, -229, -226, -223, -220, -216, -213
  331.                 dw -209, -206, -202, -198, -194, -190, -185, -181
  332.                 dw -177, -172, -167, -162, -157, -152, -147, -142
  333.                 dw -137, -132, -126, -121, -115, -109, -104, -98
  334.                 dw -92, -86, -80, -74, -68, -62, -56, -50
  335.                 dw -44, -38, -31, -25, -19, -13, -6, 0
  336.                 dw 6, 13, 19, 25, 31, 38, 44, 50
  337.                 dw 56, 62, 68, 74, 80, 86, 92, 98
  338.                 dw 104, 109, 115, 121, 126, 132, 137, 142
  339.                 dw 147, 152, 157, 162, 167, 172, 177, 181
  340.                 dw 185, 190, 194, 198, 202, 206, 209, 213
  341.                 dw 216, 220, 223, 226, 229, 231, 234, 237
  342.                 dw 239, 241, 243, 245, 247, 248, 250, 251
  343.                 dw 252, 253, 254, 255, 255, 256, 256
  344.  
  345. Sinus2:
  346.                 dw 307, 307, 307, 306, 306, 305, 304, 303, 301
  347.                 dw 300, 298, 296, 294, 292, 289, 287, 284
  348.                 dw 281, 278, 274, 271, 267, 263, 260, 255
  349.                 dw 251, 247, 242, 237, 233, 228, 222, 217
  350.                 dw 212, 206, 201, 195, 189, 183, 177, 171
  351.                 dw 164, 158, 151, 145, 138, 131, 124, 118
  352.                 dw 111, 103, 96, 89, 82, 75, 67, 60
  353.                 dw 53, 45, 38, 30, 23, 15, 8, 0
  354.                 dw -8, -15, -23, -30, -38, -45, -53, -60
  355.                 dw -67, -75, -82, -89, -96, -103, -111, -118
  356.                 dw -124, -131, -138, -145, -151, -158, -164, -171
  357.                 dw -177, -183, -189, -195, -201, -206, -212, -217
  358.                 dw -222, -228, -233, -237, -242, -247, -251, -255
  359.                 dw -260, -263, -267, -271, -274, -278, -281, -284
  360.                 dw -287, -289, -292, -294, -296, -298, -300, -301
  361.                 dw -303, -304, -305, -306, -306, -307, -307, -307
  362.                 dw -307, -307, -306, -306, -305, -304, -303, -301
  363.                 dw -300, -298, -296, -294, -292, -289, -287, -284
  364.                 dw -281, -278, -274, -271, -267, -263, -260, -255
  365.                 dw -251, -247, -242, -237, -233, -228, -222, -217
  366.                 dw -212, -206, -201, -195, -189, -183, -177, -171
  367.                 dw -164, -158, -151, -145, -138, -131, -124, -118
  368.                 dw -111, -103, -96, -89, -82, -75, -67, -60
  369.                 dw -53, -45, -38, -30, -23, -15, -8, 0
  370.                 dw 8, 15, 23, 30, 38, 45, 53, 60
  371.                 dw 67, 75, 82, 89, 96, 103, 111, 118
  372.                 dw 124, 131, 138, 145, 151, 158, 164, 171
  373.                 dw 177, 183, 189, 195, 201, 206, 212, 217
  374.                 dw 222, 228, 233, 237, 242, 247, 251, 255
  375.                 dw 260, 263, 267, 271, 274, 278, 281, 284
  376.                 dw 287, 289, 292, 294, 296, 298, 300, 301
  377.                 dw 303, 304, 305, 306, 306, 307, 307
  378.  
  379. Cosinus2:
  380.                 dw 0, -8, -15, -23, -30, -38, -45, -53, -60
  381.                 dw -67, -75, -82, -89, -96, -103, -111, -118
  382.                 dw -124, -131, -138, -145, -151, -158, -164, -171
  383.                 dw -177, -183, -189, -195, -201, -206, -212, -217
  384.                 dw -222, -228, -233, -237, -242, -247, -251, -255
  385.                 dw -260, -263, -267, -271, -274, -278, -281, -284
  386.                 dw -287, -289, -292, -294, -296, -298, -300, -301
  387.                 dw -303, -304, -305, -306, -306, -307, -307, -307
  388.                 dw -307, -307, -306, -306, -305, -304, -303, -301
  389.                 dw -300, -298, -296, -294, -292, -289, -287, -284
  390.                 dw -281, -278, -274, -271, -267, -263, -260, -255
  391.                 dw -251, -247, -242, -237, -233, -228, -222, -217
  392.                 dw -212, -206, -201, -195, -189, -183, -177, -171
  393.                 dw -164, -158, -151, -145, -138, -131, -124, -118
  394.                 dw -111, -103, -96, -89, -82, -75, -67, -60
  395.                 dw -53, -45, -38, -30, -23, -15, -8, 0
  396.                 dw 8, 15, 23, 30, 38, 45, 53, 60
  397.                 dw 67, 75, 82, 89, 96, 103, 111, 118
  398.                 dw 124, 131, 138, 145, 151, 158, 164, 171
  399.                 dw 177, 183, 189, 195, 201, 206, 212, 217
  400.                 dw 222, 228, 233, 237, 242, 247, 251, 255
  401.                 dw 260, 263, 267, 271, 274, 278, 281, 284
  402.                 dw 287, 289, 292, 294, 296, 298, 300, 301
  403.                 dw 303, 304, 305, 306, 306, 307, 307, 307
  404.                 dw 307, 307, 306, 306, 305, 304, 303, 301
  405.                 dw 300, 298, 296, 294, 292, 289, 287, 284
  406.                 dw 281, 278, 274, 271, 267, 263, 260, 255
  407.                 dw 251, 247, 242, 237, 233, 228, 222, 217
  408.                 dw 212, 206, 201, 195, 189, 183, 177, 171
  409.                 dw 164, 158, 151, 145, 138, 131, 124, 118
  410.                 dw 111, 103, 96, 89, 82, 75, 67, 60
  411.                 dw 53, 45, 38, 30, 23, 15, 8
  412.  
  413.                 end
  414.